// Wprowadzenie do techniki liczenia referencji

#import <Foundation/Foundation.h>

int main (int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSNumber          *myInt  = [[NSNumber alloc: initWithInteger: 100];
    NSNumber          *myInt2;
    NSMutableArray    *myArr = [NSMutableArray array];

    NSLog (@"Licznik referencji obiektu myInt = %lx",
         (unsigned long) [myInt retainCount]);

    [myArr addObject: myInt];
    NSLog (@"Po dodaniu do tablicy = %lx",
         (unsigned long) [myInt retainCount]);

    myInt2 = myInt;
    NSLog (@"Po przypisaniu do zmiennej myInt2 = %lx",
         (unsigned long) [myInt retainCount]);

    [myInt retain];
    NSLog (@"myInt po wywoaniu metody retain = %lx",
         (unsigned long) [myInt retainCount]);
    NSLog (@"myInt2 po wywoaniu metody retain = %lx",
         (unsigned long) [myInt2 retainCount]);

    [myInt release];
    NSLog (@"Po wywoaniu metody release = %lx",
         (unsigned long) [myInt retainCount]);

    [myArr removeObjectAtIndex: 0];
    NSLog (@"Po usuniciu z tablicy = %lx",
         (unsigned long) [myInt retainCount]);

    [myInt2 release];
    [pool drain];
    return 0;
}